#include "../bs/build_serialize.hpp"
#include "./login.hpp"

namespace message_ext {

namespace login_ext {

// 登陆返回
template<class _OUT_HELPER_T, class _IN_HELPER_T>
class bs_login_ack : public build_serialize::bs_message_t<_OUT_HELPER_T, _IN_HELPER_T> {

public:
    // 登陆请求结构
    const message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>& login() const { return login_; }
    // 登陆请求结构
    message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>& login() { return login_; }
    // 登陆请求结构
    void login(const message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>& _value) { login_ = _value; }

    // 测试基础类1
    const std::list<message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>>& login_list() const { return *login_list_; }
    // 测试基础类1
    std::list<message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>>& login_list() { return *login_list_; }
    // 测试基础类1
    void login_list(const std::list<message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>>& _value) { *login_list_ = _value; }

    // wolegequ
    const uint8_t& u8() const { return *u8_; }
    // wolegequ
    uint8_t& u8() { return *u8_; }
    // wolegequ
    void u8(const uint8_t& _value) { *u8_ = _value; }

protected:
    virtual uint32_t child_length() const {
        return login_.length() +
            login_list_.length() +
            u8_.length();
    }

    virtual bool child_serialize(_OUT_HELPER_T& _helper) const {
        return login_.serialize(_helper) &&
            login_list_.serialize(_helper) &&
            u8_.serialize(_helper);
    }

    virtual bool child_build(_IN_HELPER_T& _helper) const {
        return login_.build(_helper) &&
            login_list_.build(_helper) &&
            u8_.build(_helper);
    }

private:
     // 登陆请求结构
    message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T> login_;
     // 测试基础类1
    build_serialize::bs_list_ot<message::login::bs_account_login<_OUT_HELPER_T, _IN_HELPER_T>> login_list_;
     // wolegequ
    build_serialize::bs_crt_uint8 u8_;
};

} // namespace login_ext

} // namespace message_ext

